package com.atugigu.controller;

import com.atugigu.pojo.User;
import com.atugigu.pojo.VO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

/**
 * @author ：HB
 * @date ：Created in 2020/10/29 10:04
 * @description： 测试获得请求参数
 */
@Controller
@RequestMapping("/user")
public class UserController3 {
    /**
     * http://localhost:8080/springmvc_day02_01_response/user/quick9?username=zhangsan&age=12
     * 获得基本类型参数的测试
     * @param age :请求传过来的数据
     * @param username
     */
    @RequestMapping(value = "/quick9")
    @ResponseBody
    public void save9(int age,String username){
        //经过这里，后台就拿到了前台的数据
        System.out.println("age = " + age);
        System.out.println("username = " + username);
    }

    /**
     * http://localhost:8080/springmvc_day02_01_response/user/quick10?username=zhangsan&age=18
     * Controller中的业务方法的POJO参数的属性名与请求参数的name一致，参数值会自动映射匹配。
     * 客户端发送的数据到达服务端之后 springmvc把参数封装到实体中
     */
    @RequestMapping(value = "/quick10")
    @ResponseBody
    public void save10(User user){
        //经过这里，后台就拿到了前台的数据
        System.out.println("user = " + user);
    }

    /**
     * 获得数组类型参数
     * http://localhost:8080/springmvc_day02_01_response/user/quick11?str=3&str=5
     * @param str
     */
    @RequestMapping(value = "/quick11")
    @ResponseBody
    public void save11(String[] str){
        System.out.println(Arrays.asList(str));
    }

    /**
     * http://localhost:8080/springmvc_day02_01_response/form.jsp
     * 获得集合类型参数
     * 要将集合参数包装到一个POJO中才可以
     */
    @RequestMapping(value = "/quick12")
    @ResponseBody
    public void save12(VO vo ){
        System.out.println("vo = " + vo);
    }


    /**
     * 获得集合类型参数
     *
     * 发送ajax请求
     * 然后再方法的参数中加入@RequestBody注解
     * @RequestBody:的理解：表示将请求体中的数据封装到userList中，而这里的请求是发送的ajax请求，表示将ajax的请求数据data封装到userList
     * 能封装到userList中的前提是：1.发送的是json格式的数据，
     *                          2.contentType:"application/json;charset=utf-8"
     *                          这时候才可以将json数据直接封装到userList中
     * http://localhost:8080/springmvc_day02_01_response/user/quick13
     * @param userList
     */
    @RequestMapping(value = "/quick13")
    @ResponseBody
    public void save13(@RequestBody List<User> userList){
        System.out.println("userList = " + userList);
    }

    /**
     * http://localhost:8080/springmvc_day02_01_response/user/quick14?name=zhangsan
     * 意思就是：当我们的请求参数（name）与方法中的参数不一致时，方法中的参数需要使用@RequestParam
     * @RequestParam(value = "name")：表示请求中的参数name 对应到后台的参数username
     * 参数绑定注解
     */
    @RequestMapping(value = "/quick14")
    @ResponseBody
    public void save14(@RequestParam(value = "name") String username){
        System.out.println("username = " + username);
    }

    /**
     * Restful风格的请求是使用“url+请求方式”表示一次请求目的的，HTTP 协议里面四个表示操作方式的动词如下：
     * GET：用于获取资源
     * POST：用于新建资源
     * PUT：用于更新资源
     * DELETE：用于删除资源
     *
     * /user/1    GET ：       得到 id = 1 的 user
     * /user/1    DELETE：  删除 id = 1 的 user
     * /user/1    PUT：       更新 id = 1 的 user
     * /user       POST：      新增 user
     *
     * 上述url地址/user/1中的1就是要获得的请求参数，
     * 在SpringMVC中可以使用占位符进行参数绑定。
     * 地址/user/1可以写成/user/{id}，占位符{id}对应的就是1的值。
     * 在业务方法中我们可以使用@PathVariable注解进行占位符的匹配获取工作。
     *
     * 测试地址:http://localhost:8080/springmvc_day02_01_response/user/quick15/zhangsan
     */
    @RequestMapping(value = "/quick15/{username}")
    @ResponseBody
    public void save15(@PathVariable(value = "username") String username){
        System.out.println("username = " + username);
    }















}
